// 导入 express 模块
const express = require('express')
    // 创建 express 的服务器实例
const app = express()
    // 配置解析表单的中间件
app.use(express.urlencoded({ extended: false }));
const expressJWT = require('express-jwt')

const joi = require('@hapi/joi')
    // 配置cors跨域 npm i cors@2.8.5
const cors = require('cors');
app.use(cors())

// 定义一个全局中间件
app.use((req, res, next) => {
    res.cc = function(err, status = 1) {
        res.send({
            status,
            mess: req.body,
            message: err instanceof Error ? err.message : err
        })
    }
    next()
})


const secretKey = 'itheima No1 ^_^';
app.use(expressJWT({ secret: secretKey, algorithms: ['HS256'] }).unless({ path: [/^\/api\//] }));




// 引入路由文件
const route = require('./route/user');
app.use('/api', route)

const userinfoRoute = require('./route/userinfo');
app.use('/my', userinfoRoute);

const articleRouter = require('./route/article');
app.use('/my/article', articleRouter)

// 错误中间件
app.use(function(err, req, res, next) {
    // 捕获身份认证失败的错误
    if (err.name === 'UnauthorizedError') return res.cc('身份认证失败！')

    // 数据验证失败
    if (err instanceof joi.ValidationError) return res.cc(err)
        // 未知错误
    res.cc(err)
})

// write your code here...



// 调用 app.listen 方法，指定端口号并启动web服务器
app.listen(3010, function() {
    console.log('api server running at http://127.0.0.1:3010')
})